package demo1;

public class Test {
    public static void main(String[] args) {
        //内部类
        //内部类是定义在一个类内部的类。
        //内部类有四种
        //静态内部类
        //实例(构造)内部类
        //局部内部类
        //匿名内部
 // 静态内部类：
        //静态内部类的实例化
        //Dog dog1 = new Dog();
      //  Dog.Inner inner = new Dog.Inner();
        //静态内部类访问外部类的成员
        //无法引用外部类中的非静态成员
       // System.out.println(inner.name);    //这是引用自己成员的操作，不能算作引用外部类中的成员
     //   System.out.println(inner.sex);
        /*Dog dog1 = new Dog();
        Dog.Inner inner1 =  dog1.new Inner();
    inner1.func2();*/
    //实例内部类：
   /*Dog dog1 = new Dog();
        Dog.Test2 test2 =  dog1. new Test2();
        test2.func2();*/
   //局部内部类

Dog dog = new Dog();
dog.func1();








    }
}

//静态内部类
/*class Dog{
     public   static String sex = "男" ;
    String name = "李四";
    int age;
// 静态内部类的创建！
  static    class    Inner{
     //   String name = "张三";

  public void test(){

            System.out.println("我是静态内部类");
            System.out.println(sex);
         //   System.out.println(name);
        }

      *//*  public static void func1 (){
          //System.out.println(name);
          // System.out.println(this.sex);

        };*//*
      public void func2(){
          System.out.println("狗的名字是："+name);
      }
    }
}*/
// 实例内部类
/*class Dog{
    String name = "王五";
    int age = 10;
    //实例内部类与静态内部类的区别？
   public static int  b =  5;
   private void test1(){
       System.out.println("尝试访问外部类中方法");
   }

 public   class Test2{
     String name = "张三";
     int age = 9;
     int a ;
   *//*  public void func1(){
        System.out.println("实现了实例内部类");
     }*//*
     public void func2(){
         //直接使用this可以访问内部类中的成员
         System.out.println("我的名字是"+this. name+", 年龄是"+ this.age);
         //那如何通过this访问到外部类中的成员呢？
         System.out.println("我的名字是"+ Dog. this. name+", 年龄是"+ Dog.this.age);

     }

}
}*/
//局部内部类
class Dog{
    String name = "张三";
   public void shout(){
       System.out.println("狗发出汪汪叫");
   }


  public void func1(){
     class Test3{
         int a ;
         public void func2(){
             System.out.println("我的名字叫"+name);
         }

     }
   Test3 test3 = new Test3();
     test3. func2();


  }


}





































